package com.esyoga.yoyoga.util;

import com.github.qcloudsms.SmsSingleSender;
import com.github.qcloudsms.SmsSingleSenderResult;
import org.json.JSONException;

import javax.xml.ws.http.HTTPException;
import java.io.IOException;
import java.util.Random;

/**
 * 短信验证码工具类
 * @author YangTao
 */
public class SecurityCodeUtil {
    /**
     * 短信验证码获取接口
     * @param phoneNumber ：手机号
     * @param templateId ：模板id{
     *                  384488:登录
     *                  384820：注册
     *                  384822：找回密码
     * @param code :需要发送的验证码
     * @return SmsSingleSenderResult：{
     *                  响应参数：
     *                       "result": 0,
     *                      "errmsg": "OK",
     *                      "ext": "",
     *                       "fee": 1,
     *                      "sid": "xxxxxxx"
     *
     *                     参数	必选  类型	描述
     *                  result	是	number	错误码，0表示成功（计费依据），非0表示失败，更多详情请参见 错误码
     *                  errmsg	是	string	错误消息，result 非0时的具体错误信息
     *                   ext	否	string	用户的 session 内容，腾讯 server 回包中会原样返回
     *                   fee	否	number	短信计费的条数，计费规则请参考 国内短信内容长度计算规则 或 国际短信内容长度计算规则
     *                   sid	否	string	本次发送标识 ID，标识一次短信下发记录
     *      }
     */
    public static SmsSingleSenderResult getCode(String phoneNumber, int templateId, String code) {
        // 短信应用 SDK AppID
        // SDK AppID 以1400开头
        int appid = 1400238747;
        // 短信应用 SDK AppKey
        String appkey = "1b1c67bb67f87d9774c095b896493674";
        // 需要发送短信的手机号码--数组

        // 短信模板 ID，

        // NOTE: 这里的模板 ID`7839`只是示例

        // 签名
        // NOTE: 签名参数使用的是`签名内容`，而不是`签名ID`。
        String smsSign = "YYTProgram1";
        SmsSingleSenderResult result = null;
        try {
            System.out.println("验证码:"+code);
            //电话号码
            System.out.println("电话号码："+phoneNumber);
            String[] params = {code};
            SmsSingleSender ssender = new SmsSingleSender(appid, appkey);
            // 签名参数未提供或者为空时，会使用默认签名发送短信
            result = ssender.sendWithParam("86", phoneNumber,
                    templateId, params, smsSign, "", "");


        } catch (HTTPException e) {
            // HTTP 响应码错误
            e.printStackTrace();
        } catch (JSONException e) {
            // JSON 解析错误
            e.printStackTrace();
        } catch (IOException e) {
            // 网络 IO 错误
            e.printStackTrace();
        } catch (com.github.qcloudsms.httpclient.HTTPException e) {
            e.printStackTrace();
        }
        return result;

    }
    /**
     * 注册通过手机号
     *
     * @return
     */
    public static void userRegisterCode(String phoneNumber, String code) {
        //模板id
        int templateId = 384820;
        SmsSingleSenderResult state = SecurityCodeUtil.getCode(phoneNumber, templateId, code);
        System.out.println("响应状态："+ state);

    }

    /**
     * 用户绑定手机号
     *
     * @return
     */
    public static void bindingPhoneCode(String phoneNumber, String code) {
        //模板id
        int templateId = 385107;
        SmsSingleSenderResult state = SecurityCodeUtil.getCode(phoneNumber, templateId, code);
        System.out.println("响应状态："+ state);

    }

    /**
     * 用户登录通过手机号
     *
     * @return
     */
    public static void userLoginCode(String phoneNumber, String code) {
        //模板id
        int templateId = 384488;
        SmsSingleSenderResult state = SecurityCodeUtil.getCode(phoneNumber, templateId, code);
        System.out.println("响应状态："+ state);
    }

    /**
     * 重置密码
     *
     * @param phoneNumber
     * @param code
     */
    public static void resetPasswordCode(String phoneNumber, String code) {
        //模板id
        int templateId = 384822;
        SmsSingleSenderResult state = SecurityCodeUtil.getCode(phoneNumber, templateId, code);
        System.out.println("响应状态："+ state);
    }

    /**
     * 获取验证码随机数
     * @return
     */
    public static String getRandomCode(){
        Random random = new Random();
        //生成四位随机数
        String code = (random.nextInt(9000) + 1000)+"";
        return code;
    }
}
